package cn.dida.service;

import java.util.List;

import cn.dida.model.Pageable;
import cn.dida.model.Product;

/**
 * 产品管理 接口
 * @author weiwei
 */
public interface ProductService {
	/**
	 * 根据产品id和公司id获取产品信息
	 * @param id 产品id
	 * @param companyId	公司id
	 * @return Product 产品信息
	 */
    public Product getProductById(Integer companyId, Integer id);

    /**
     * 根据编号与公司id获取产品信息
     * @param number 产品编号
     * @param companyId 公司id
     * @return Product 产品信息
     */
    Product getProductByNumber(Integer companyId, String number);

    /**
     * 根据产品名称和公司id获取产品信息
     * @param name 产品名称
     * @param companyId 公司id
     * @return Product 产品信息
     */
    Product getProductByName(Integer companyId, String name);

    /**
     * 根据条码和公司id获取产品信息
     * @param barcode 产品条码
     * @param companyId 公司id
     * @return Product 产品信息
     */
    Product getProductByBarcode(Integer companyId, String barcode);

    /**
     * 产品列表
     * @param companyId 公司id
     * @param keyword 查询条件
     * @param state 状态：1使用中，2已封存
     * @param page 分页游标
     * @return Pageable<Product> 产品分页列表
     */
    Pageable<Product> queryProduct(Integer companyId, String keyword, Integer state, int page);

    /**
     * 产品列表（用于数据导出）
     * @param keyword 查询条件，关键字：名称、编号、条码、品牌
     * @param state   产品状态：1使用中，2已封存
     * @return List<Product> 产品列表
     * @date 2016-12-07 14:38
     */
    List<Product> queryProductForExport(Integer companyId, String keyword, Integer state);

    /**
     * 新增产品
     * @param product 产品实体信息
     * @return Boolean true操作成功，false操作失败
     */
    Boolean insertProduct(Product product);
    /**
     * 更新产品
     * @param product 产品实体信息
     * @return Boolean true操作成功，false操作失败
     */
    Boolean updateProduct(Product product);
    /**
     * 删除产品
     * @param companyId 公司id
     * @param number 产品编号
     * @return int 受影响的记录行数
     */
    Boolean deleteProductByNumber(Integer companyId, String number);

    /**
     * 选择商品功能：根据id获取商品列表
     * @param ids 商品id
     * @return List<Product> 商品列表
     * @date 2016-11-17 15:30
     */
    List<Product> getProductListByIds(String ids);

    /**
     * 选择商品功能：根据活动id获取商品列表
     * @param activityId 活动id
     * @return List<Product> 商品列表
     * @date 2016-11-17 15:30
     */
    List<Product> getProductsByActivityId(String activityId);

    /**
     * 根据编码获取产品信息
     * @param number
     * @return
     */
    public  List<Product> getByNumber(String number);
}
